package com.hrzyit.base.widgets

import android.app.Dialog
import android.content.Context
import android.graphics.drawable.AnimationDrawable
import android.view.Gravity
import android.widget.ImageView
import com.hrzyit.base.R

/**
 * 自定义加载弹框
 * @author YangWei
 * @date 2019/3/20
 */
class ProgressLoading private constructor(context: Context, themeResId: Int) : Dialog(context, themeResId) {

    companion object {
        // 定义加载弹框对象
        private lateinit var mDialog: ProgressLoading
        // 动画组件
        private var animDrawable: AnimationDrawable? = null

        /**
         * 创建加载弹框并返回对象
         */
        fun create(context: Context): ProgressLoading {
            // 第一个参数 context 上下文
            // 第二个参数 themeResId 加载弹框样式
            mDialog = ProgressLoading(context, R.style.LightProgressDialog)

            // 加载布局文件
            mDialog.setContentView(R.layout.progress_dialog)

            // 设置属性
            // 可以取消
            mDialog.setCancelable(true)

            // 点击外侧不可以取消
            mDialog.setCanceledOnTouchOutside(false)

            // 屏幕中央显示
            mDialog.window.attributes.gravity = Gravity.CENTER

            // 获取 Dialog 的 Window 属性
            val lp = mDialog.window.attributes

            // 设置 Window 灰暗程度
            lp.dimAmount = 0.2f

            // 替换 Dialog 的 Window 属性
            mDialog.window.attributes = lp

            // 配置动画
            // 1. 获取图片组件
            val loadingView = mDialog.findViewById<ImageView>(R.id.iv_loading)

            // 2. 获取图片组件背景并转换为动画组件
            animDrawable = loadingView.background as AnimationDrawable

            return mDialog
        }
    }

    /**
     * 显示加载弹框
     */
    fun showLoading() {
        super.show()
        // 播放动画
        animDrawable?.start()
    }

    fun hideLoading() {
        super.dismiss()
        // 停止动画
        animDrawable?.stop()
    }

}